home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / hdsource.zip / HDSCAN.ASM < prev    next >
Assembly Source File  |  1986-02-24  |  11KB  |  296 lines

  1.      PAGE     64,132            ;PAGE WIDTH,LENGTH
  2.      .SALL
  3.      TITLE     PC/AT DIAGNOSTIC - QUICK SCAN FOR DEFECTS
  4. ; **********************************************************************
  5. ; *                                       *
  6. ; *    MODULE NAME    HDSCAN                           *
  7. ; *    AUTHOR           JIM BRACKING                       *
  8. ; *                                       *
  9. ; *    DECSRIPTION    THIS PROGRAM PERFORMS THE FOLLOWING           *
  10. ; *               FUNCTIONS:                       *
  11. ; *                                       *
  12. ; *               1. THIS PROGRAM EXECUTES A VERIFY READ FOR      *
  13. ; *              EVERY SECTOR ON THE DISK.               *
  14. ; *                                       *
  15. ; **********************************************************************
  16. ;
  17. ; **********************************************************************
  18. ; *            EXTERNAL PROGRAM REFERENCES               *
  19. ; **********************************************************************
  20.      EXTRN     SCRMGR:NEAR
  21. ; **********************************************************************
  22. ; *              EXTERNAL DATA REFERENCES               *
  23. ; **********************************************************************
  24.      INCLUDE HDDATA.ASM
  25. ; **********************************************************************
  26. ; *            EXTERNAL SUBROUTINE REFERENCES               *
  27. ; **********************************************************************
  28.      INCLUDE HDSUB.ASM
  29. ; **********************************************************************
  30. ; *                PUBLIC DECLARES                   *
  31. ; **********************************************************************
  32.      PUBLIC  HDSCAN
  33. ; **********************************************************************
  34. ; *                 MACROS                    *
  35. ; **********************************************************************
  36.      IF1
  37.      INCLUDE HD.MAC
  38.      INCLUDE \SCRMGR\SCRNWORK.MAC
  39.      ENDIF
  40. ; **********************************************************************
  41. ; *                                       *
  42. ; *                   BEGIN                       *
  43. ; *                                       *
  44. ; **********************************************************************
  45. CSEG     SEGMENT PARA PUBLIC 'CODE'
  46.      ASSUME CS:CSEG
  47. HDSCAN PROC    NEAR
  48.      ASSUME  DS:CSEG           ;DATA SEGMENT
  49.      JMP     BY_ID               ;JMP AROUND ID
  50.      ID     HDSCAN
  51.      INCLUDE \SCRMGR\SCRNWORK.ASM
  52. ; **********************************************************************
  53. ; *             EQUATES AND STRUCTURES                *
  54. ; **********************************************************************
  55.      INCLUDE HDEQU.ASM
  56. ; **********************************************************************
  57. ; *                 SCREENS                   *
  58. ; **********************************************************************
  59.   SFIELD X00,X01,,@LABEL,RV,23,02,'CTRL-F1 TO START'
  60.   SFIELD X01,X02,,@LABEL,RV,23,29,'ESC FOR THE MAIN MENU'
  61.   SFIELD X02,X00,,@LABEL,RV,23,62,'CTRL-BRK TO STOP'
  62. ;
  63.   SFIELD XI0,XI1,,@LABEL,LO,19,15,'DRIVE =>'
  64.   SFIELD XI1,XI2,1,@EX+@NUM+@UC+@NFULL+@REQ,LO,19,24
  65.   SFIELD XI2,XI0,,@LABEL,LO,20,15,'(1 OR 2)'
  66. ;
  67.   SFIELD XS0,XS1,,@LABEL,LO,19,46,'STATUS =>'
  68.   SFIELD XS1,XS0,,@LABEL,LO,19,56,'** IDLE **   '
  69. ;
  70.   SFIELD XS2,XS3,,@LABEL,LO,19,46,'STATUS =>'
  71.   SFIELD XS3,XS2,,@LABEL,HI,19,56,'** WORKING **'
  72. ;
  73.   SFIELD XC0,XC1,,@LABEL,LO,20,46,'CYLINDER =>'
  74.   SFIELD XC1,XC0,04,@LABEL,LO,20,58
  75. ;
  76.   SFIELD XE0,XE1,,@LABEL,LO,21,46,'ERRORS =>'
  77.   SFIELD XE1,XE0,04,@LABEL,LO,21,56
  78. ;
  79.   SFIELD T05,T05,,@LABEL,RV,17,33,'DEFECT SCAN'
  80. ;
  81. BY_ID:
  82. HDSCAN ENDP
  83. ; *********************************************************************
  84. ; *                                      *
  85. ; *              QUICK DEFECT SCAN                  *
  86. ; *                                      *
  87. ; *********************************************************************
  88. QDS     PROC
  89.      CLS     LO,4,1,23,78           ;CLEAR THE SCREEN
  90.      BOX     17,0,08,80,LO           ;OUTLINE
  91.      WRITEC  0CCH,LO,17,0,1        ;  THE
  92.      WRITEC  0B9H,LO,17,79,1       ;  SCREEN
  93.      WRITE     T05               ;TYPE OF TEST
  94.      WRITE     X00               ;COMMANDS
  95. QDS_00:
  96.      WRITE     XS0               ;STATUS
  97.      LEA     BX,XI1            ;DRIVE ENTRY
  98.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  99.      CMP     ALL_SW,0FFH           ;RUN ALL TEST??
  100.      JE     QDS_01            ;YES
  101.      MOV     [BX].S_DATA,' '       ;CLEAR DRIVE
  102.      JMP     QDS_01A           ;CONTINUE
  103. QDS_01:
  104.      MOV     AL,DR               ;FETCH DRIVE
  105.      INC     AL               ;NUMBER
  106.      OR     AL,30H            ;MAKE IT A NUMBER
  107.      MOV     [BX].S_DATA,AL        ;SET IT IN THE MSG
  108.      WRITE     XI0               ;DRIVE
  109.      JMP     QDS_15            ;CONTINUE
  110. QDS_01A:
  111.      WRITE     XI0               ;DRIVE
  112. QDS_02:
  113.      READR     BX               ;FETCH DRIVE
  114.      CALL     TRANS_KEY           ;TRANSLATE THE KEY
  115.      JNC     QDS_04            ;SUCESSFULL
  116. QDS_03:
  117.      CALL     BEEP               ;RING THE BELL
  118.      JMP     QDS_02            ;TRY AGAIN
  119. QDS_04:
  120.      CMP     AL,ESC_KEY           ;ESCAPE KEY??
  121.      JNE     QDS_05            ;NO
  122.      JMP     EXIT               ;RETURN
  123. QDS_05:
  124.      CMP     AL,C_BRK           ;CONTROL BREAK KEY??
  125.      JNE     QDS_07            ;NO
  126.      JMP     QDS               ;YES - START OVER
  127. QDS_07:
  128.      CMP     AL,C_F1           ;CTRL_F1??
  129.      JNE     QDS_03            ;NO - INVALID KEY
  130.      LEA     BX,XI1            ;DRIVE ENTRY
  131.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  132.      MOV     AL,[BX].S_DATA        ;FETCH DRIVE NUMBER
  133.      CMP     AL,'1'                ;VALID DRIVE??
  134.      JE     QDS_08            ;YES
  135.      CMP     AL,'2'                ;VALID DRIVE??
  136.      JE     QDS_08            ;YES
  137.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  138.      PMSG     22               ;DISPLAY THE MESSAGE
  139.      CALL     BEEP               ;RING THE BELL
  140.      WRITE     XI0               ;DRIVE
  141.      JMP     QDS_02            ;TRY AGAIN
  142. QDS_08:
  143.      AND     AL,0FH            ;ADJUST
  144.      DEC     AL               ;  DRIVE NUMBER
  145.      CMP     AL,NUM_DR           ;DRIVE INSTALLED
  146.      jb     QDS_10            ;YES
  147.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  148.      PMSG     21               ;DISPLAY THE MESSAGE
  149.      CALL     BEEP               ;RING THE BELL
  150.      WRITE     XI0               ;DRIVE + INTERLEAVE
  151.      JMP     QDS_02            ;TRY AGAIN
  152. QDS_10:
  153.      MOV     DR,AL               ;SAVE DRIVE NUMBER
  154.      LEA     BX,XI1            ;DRIVE ENTRY
  155.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  156.      WRITE     XI0               ;DRIVE
  157. QDS_15:
  158.      CALL     READ_PARMS           ;FETCH DRIVE PARMS
  159.      MOV     CUR_HD,0           ;INITIALIZE
  160.      MOV     CUR_SEC,1           ; THE
  161.      MOV     CUR_CYL,0           ;  STARTING FIELDS
  162.      MOV     ERR_CNT,0           ;CLEAR THE ERROR COUNT
  163.      MOV     NUM_SEC,1           ;NUMBER OF SECTORS
  164.      CALL     UPD_CYL           ;DISPLAY CYLINDER NUMBER
  165.      CALL     UPD_ERR           ;DISPLAY ERROR COUNT
  166.      WRITE     XS2               ;STATUS
  167.      CLS     LO,4,2,16,78           ;CLEAR THE SCREEN
  168.      CALL     HIDE_CUR           ;HIDE THE CURSOR
  169. ; *********************************************************************
  170. ; *               BEGIN THE TEST                  *
  171. ; *********************************************************************
  172.      CALL     CTLR_DIAG           ;EXECUTE CTLR HDNOSTICS
  173.      JNC     QDS_30            ;SUCESSFULL
  174.      PMSG     42,HI               ;FAILED
  175.      CALL     UPD_ERR           ;DISPLAY ERROR COUNT
  176.      JMP     QDS_00            ;NEXT
  177. QDS_30:
  178.      MOV     AH,0BH            ;CHECK FOR
  179.      INT     21H               ;  CONTROL BREAK
  180.      CALL     UPD_CYL           ;DISPLAY CURRENT CYLINDER
  181.      CMP     PCT,00H           ;IBM/AT??
  182.      JE     QDS_35            ;YES
  183.      JMP     QDS_70            ;NO
  184. ; *********************************************************************
  185. ; *               FOR THE IBM/AT                  *
  186. ; *********************************************************************
  187. QDS_35:
  188.      MOV     HD_CMD,VER_CMD        ;VERIFY COMMAND
  189.      MOV     CUR_SEC,01H           ;START AT SECTOR ONE
  190.      MOV     NUM_SEC,17           ;NUMBER OF SECTORS
  191. QDS_45:
  192.      MOV     AH,HD_CMD           ;FETCH COMMAND
  193.      MOV     AL,NUM_SEC           ;NUMBER OF SECTORS
  194.      MOV     DX,CUR_CYL           ;CURRENT CYLINDER
  195.      XCHG     DH,DL               ;ADJUST IT
  196.      MOV     CX,6               ;SHIFT COUNT
  197.      SHL     DL,CL               ;ADJUST CYL HIGH
  198.      OR     DL,CUR_SEC           ;SET SECTOR NUMBER
  199.      MOV     CX,DX               ;CX SET
  200.      MOV     DH,CUR_HD           ;SET HEAD
  201.      MOV     DL,DR               ;DRIVE
  202.      OR     DL,80H            ;  NUMBER
  203.      INT     13H               ;EXECUTE THE COMMAND
  204.      JNC     QDS_50            ;SUCESSFULL
  205.      CMP     AL,CTLR_ER           ;CTLR ERROR??
  206.      JNE     QDS_48            ;NO
  207.      CALL     CTLR_DIAG           ;CTLR HD
  208.      JNC     QDS_48            ;SUCESSFULL
  209.      JMP     QDS_00            ;STOP
  210. QDS_48:
  211.      MOV     BX,AX               ;SAVE ERROR CODE
  212.      MOV     DX,HD_P3           ;SECTOR NUMBER REGISTER
  213.      MOV     AH,18               ;MAX SECTORS +1
  214.      IN     AL,DX               ;GET SECTOR IN ERROR
  215.      MOV     CUR_SEC,AL           ;SAVE SECTOR IN ERROR
  216.      INC     AL               ;PAST ERROR SECTOR
  217.      PUSH     AX               ;SAVE AX
  218.      MOV     AL,BH               ;ERROR CODE
  219.      CALL     DECODE_ERR           ;LET KNOW ABOUT T